import { createSlice } from '@reduxjs/toolkit'
import { initialState } from './data'
import { setUserInfo, setIsShowStudentEdit, setStudentInfo, setStudentListData, setAdminListData } from './action'
import { get_admin_list_async, get_menu_async, get_student_list_data_async, get_user_info_async } from './request'

export const userSlice = createSlice({
  name: 'user',
  initialState,
  // 这些 reducer 函数用于处理与当前切片（slice）相关的同步 action
  reducers: {
    // 设置用户信息
    set_user_info: setUserInfo,
    // 设置学生管理编辑框的显示
    set_is_show_student_edit: setIsShowStudentEdit,
    // 设置学生管理中点击编辑该学生的信息
    set_student_info: setStudentInfo,
    // 设置学生管理列表中的数据
    set_student_list_data: setStudentListData,
    // 设置管理员列表中的数据
    set_admin_list_data: setAdminListData
  },
  // extraReducers 用于处理异步 thunk 的不同状态（pending、fulfilled、rejected）。
  extraReducers: builder => {
    builder
      // 获取菜单-----持久化存储菜单，之后查询菜单就直接本地查询就可以了
      .addCase(get_menu_async.fulfilled, (state, res) => {
        // 添加判断 如果后端报错什么的，res.payload就是undefined，应该返回[]
        localStorage.setItem('menu', JSON.stringify(res.payload ? res.payload : []))
        state.menu = res.payload
      })
      // 获取用户信息，防止刷新丢失
      .addCase(get_user_info_async.fulfilled, (state, res) => {
        state.user_info = res.payload || {}
      })
      .addCase(get_student_list_data_async.pending, (state, res) => {
        state.loading = true
      })
      // 获取学生列表
      .addCase(get_student_list_data_async.fulfilled, (state, res) => {
        state.loading = false
        state.student_list_data.count = res.payload.data.count
        state.student_list_data.list = res.payload.data.data
      })
      // 获取管理员列表
      .addCase(get_admin_list_async.fulfilled, (state, res) => {
        state.admin_list_data.list = res.payload.data
        state.admin_list_data.count = res.payload.count
      })
  }
})

export const { set_user_info, set_is_show_student_edit, set_student_info, set_student_list_data, set_admin_list_data } = userSlice.actions

export default userSlice.reducer
